#ifndef LOGGER_H_
#define LOGGER_H_

/**********************************************************************
 *	logger.h
 * 
 *  Descripcion: Clase sigleton encargada de guardar la salida de las 
 * 			     operaciones realizadas en los archivos out. 
 *  
 *
 *********************************************************************/

#include <fstream>
#include <iostream>
#include <string>
#include <stdexcept>
#include <ctime>
#include "..\Exceptions\closeLoggerExcep.h"
#include "..\Figure\Figure.h"

class Logger{
	
	private:
		static Logger* instance; 
		
		std::ofstream arch_out; //stream para manejar el archivo OUT donde van a estar los mensajes loggeados
		
		bool debugMode;
		
		Logger(){debugMode=true;}
		
		bool isDebugMode();
		
	public:

		static Logger* get_instance();
					
		~Logger(){}
 
		void comenzar_log();
		
		void terminar_log();
		
		void log(std::string log ) throw (CloseLoggerExcep);

        void log(std::runtime_error exeption) throw (CloseLoggerExcep);

		void log(Figure* figure) throw (CloseLoggerExcep);
	
		static void destroy();
		 
		bool hay_log_abierto(); 

};
#endif /*LOGGER_H_*/

